package com.car.mapper;

import com.car.pojo.RepairAppointment;
import com.car.pojo.RepairAppointmentQueryParam;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 故障预约Mapper接口
 */
@Mapper
public interface RepairAppointmentMapper {

    /**
     * 分页查询故障预约
     */
    List<RepairAppointment> page(@Param("param") RepairAppointmentQueryParam param);

    /**
     * 查询总记录数
     */
    Long count(@Param("param") RepairAppointmentQueryParam param);

    /**
     * 根据ID查询故障预约详情
     */
    RepairAppointment getById(@Param("id") Long id);

    /**
     * 更新预约状态和维修员
     */
    void updateStatus(@Param("id") Long id, @Param("status") String status, @Param("empName") String empName);

    /**
     * 批量删除故障预约
     */
    void deleteBatch(@Param("ids") List<Long> ids);

    /**
     * 查询所有故障预约（用于导出等）
     */
    List<RepairAppointment> listAll(@Param("param") RepairAppointmentQueryParam param);

    /**
     * 添加故障预约
     */
    void add(RepairAppointment appointment);

    /**
     * 根据用户ID查询故障预约记录
     */
    List<RepairAppointment> listByUserId(@Param("userId") Long userId);

    /**
     * 根据用户ID统计故障预约数量
     */
    Integer countByUserId(@Param("userId") Long userId);

    /**
     * 获取空闲维修员列表
     * 查询job_id=2且status='空闲'的员工
     */
    List<Map<String, Object>> getRepairStaff();

    /**
     * 根据员工名称查询维修预约
     */
    List<RepairAppointment> listByEmpName(@Param("empName") String empName);

    /**
     * 统计当前员工关联的状态为'已确认'的维修预约数量
     */
    @Select("SELECT COUNT(*) FROM repair_appointments WHERE emp_name = #{empName} AND status = '已确认'")
    Integer countConfirmedByEmpName(@Param("empName") String empName);

    /**
     * 统计当前员工关联的状态为'已完成'的维修预约数量
     */
    @Select("SELECT COUNT(*) FROM repair_appointments WHERE emp_name = #{empName} AND status = '已完成'")
    Integer countCompletedByEmpName(@Param("empName") String empName);

}